package main

import "fmt"

// 计数器功能方式一，但是只有count这个函数在用，会污染全局变量
//var i = 0
//
//func counter() {
//
//	i++
//	fmt.Println(i)
//}

// 方式二：闭包：引用了外部非全局的自由变量，打印i的内存地址，是相同的，为之保留
//func getCounter() func() {
//	var i = 0
//
//	counter := func() {
//
//		i++
//		fmt.Println(i)
//	}
//	return counter
//}

func getCounter(i int) func() {

	counter := func() {
		i++
		fmt.Println(i)
	}
	return counter
}
func main() {
	counter := getCounter(10)
	counter()
	counter()
	counter()
}
